module.exports = {
  apps: [{
    name: 'nodejs-app',
    script: 'server.js',
    instances: 'max', // 或者设置具体数字，如 2
    exec_mode: 'cluster',
    
    // 环境变量
    env: {
      NODE_ENV: 'development',
      PORT: 3000,
      DB_HOST: 'localhost',
      DB_PORT: 3306,
      DB_USER: 'root',
      DB_PASSWORD: 'your_password_here',
      DB_NAME: 'myapp_db'
    },
    
    // 生产环境变量
    env_production: {
      NODE_ENV: 'production',
      PORT: 3000,
      DB_HOST: 'localhost',
      DB_PORT: 3306,
      DB_USER: 'root',
      DB_PASSWORD: 'your_secure_password_here',
      DB_NAME: 'myapp_db'
    },
    
    // 日志配置
    log_file: './logs/app.log',
    out_file: './logs/out.log',
    error_file: './logs/error.log',
    log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
    merge_logs: true,
    
    // 监控和重启配置
    watch: false, // 生产环境建议关闭
    ignore_watch: ['node_modules', 'logs', '.git'],
    max_memory_restart: '500M',
    
    // 自动重启配置
    autorestart: true,
    max_restarts: 10,
    min_uptime: '10s',
    restart_delay: 4000,
    
    // 其他配置
    kill_timeout: 5000,
    listen_timeout: 3000,
    wait_ready: true,
    
    // 健康检查
    health_check_grace_period: 3000,
    
    // 时间相关
    time: true,
    
    // 进程管理
    pmx: true,
    
    // 源码映射
    source_map_support: true
  }],

  // 部署配置 (可选)
  deploy: {
    production: {
      user: 'deploy', // 服务器用户名
      host: ['your-server-ip'], // 服务器IP地址，多个服务器用数组
      ref: 'origin/main', // Git分支
      repo: 'your-git-repo-url', // Git仓库地址
      path: '/var/www/nodejs-app', // 服务器部署路径
      'post-deploy': 'npm install && npm run init-db && pm2 reload ecosystem.config.js --env production && pm2 save',
      'pre-deploy': 'git fetch origin',
      'post-setup': 'npm install && npm run init-db'
    },
    
    staging: {
      user: 'deploy',
      host: ['staging-server-ip'],
      ref: 'origin/develop',
      repo: 'your-git-repo-url',
      path: '/var/www/nodejs-app-staging',
      'post-deploy': 'npm install && npm run init-db && pm2 reload ecosystem.config.js --env staging && pm2 save'
    }
  }
};
